package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;


import com.itheima.common.PageResult5;
import com.itheima.common.Result3;
import com.itheima.entity.Companys;
import com.itheima.entity.User;
import com.itheima.mapper.CompanysMapper;
import com.itheima.mapper.UserMapper;
import com.itheima.service.CompanysService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.UUID;


@Service
public class CompanysServiceImpl extends ServiceImpl<CompanysMapper, Companys> implements CompanysService {
    @Autowired
    private CompanysMapper companysMapper;

    @Autowired
    private UserMapper userMapper;

    @Override
    public PageResult5 findPage(Integer page, Integer pagesize, String tags, String province, String city, String shortName, Integer state) {
        PageResult5 pageResult = new PageResult5();
        if (page==null){
            List<Companys> companys = companysMapper.selectList(null);
            pageResult.setPage(1);
            pageResult.setPages(1);
            pageResult.setPagesize(10000);
            pageResult.setItems(companys);
            return pageResult;
        }

        IPage<Companys> p = new Page<>(page, pagesize);
        LambdaQueryWrapper<Companys> warpper = new LambdaQueryWrapper<>();
        warpper.like(tags != null, Companys::getTags, tags).eq(city != null, Companys::getCity, city)
                .eq(province != null, Companys::getProvince, province).like(shortName != null, Companys::getShortName, shortName)
                .eq(state != null, Companys::getState, state);
        IPage<Companys> companysIPage = companysMapper.selectPage(p, warpper);
        pageResult.setCounts((int) companysIPage.getTotal());
        pageResult.setItems(companysIPage.getRecords());
        pageResult.setPages((int) companysIPage.getPages());
        pageResult.setPagesize(pagesize);
        pageResult.setPage(page);
        return pageResult;
    }

    @Override
    public Result3 updateState(Integer id, Integer state) {
        Companys companys = companysMapper.selectById(id);
        companys.setState(state);
        companysMapper.updateById(companys);
        return new Result3(true);
    }

    @Override
    @Transactional
    public void add(Companys companys, String username) {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getEmail, username);
        User user = userMapper.selectOne(wrapper);
        companys.setCreatorID(user.getId().intValue());
        companys.setNumber(UUID.randomUUID().toString());
        companys.setAddDate(new Date());
        companys.setState(1);
        Boolean isFamous = (Boolean) companys.getIsFamous();
        if (isFamous) {
            companys.setIsFamous(1);
            companysMapper.insert(companys);
        } else {
            companysMapper.insert(companys);
            companys.setIsFamous(0);
        }
    }
}
